[アップデート] AWS Elemental MediaLiveとAWS Elemental MediaPackageの連携がこれまでよりも簡単になりました
はじめに
清水です。AWS Media Servicesの細かなアップデートを追っていくコーナーです。本エントリで紹介するのはこちら、AWS Elemental MediaLiveでチャンネル出力先にAWS Elemental MediaPackageのチャンネルを選択できるようになり、これら2つのサービス間連携がこれまでよりも簡単になりました。(2019/03/08にポストされたアップデート情報です。)
- AWS Elemental MediaLive Simplifies Sending Live Streams to AWS Elemental MediaPackage
- AWS Elemental MediaLive から AWS Elemental MediaPackage へのライブストリーミング送信が簡単に
これまでAWS Elemental MediaLiveからAWS Elemental MediaPackageの連携は、AWS Elemental MediaPackgeのチャンネルのInput URLならびにその認証情報を、AWS Elemental MediaLiveのHLS group destinationに設定する必要がありました。今回のアップデートでAWS Elemental MediaLiveの出力グループとしてAWS Elemental MediaPackageのチャンネルを指定できるようになり、チャンネルID等を指定するだけで連携が可能になりました。本エントリではこれまでの連携方法とアップデートで簡単になった連携方法それぞれを確認してみたいと思います。
これまでのAWS Elemental MediaLiveからAWS Elemental MediaPackageの連携方法を振り返ってみる
まずはこれまでのAWS Elemental MediaLiveとAWS Elemental MediaPackageの連携方法を振り返ってみましょう。例えばAWS Media Services(含むMediaLive、MediaPackage)リリース直後にに公開した下記エントリで当時のようすを確認できます。
この2017年12月当時では、まずAWS Elemental MediaPackageで2つのチャンネルを作成し、そのInput URLならびにその認証情報をAWS Elemental MediaLiveのチャンネルのHLS Output groupのdestination A、destination Bのそれぞれに入力して設定していました。この際の認証情報は、AWSマネージメントコンソール上では意識しなくても設定できるのですが、裏側ではEC2 System Managerと連携しておりちょっとわかりにくいポイントでもありました。
その後、2018年8月にはAWS Elemental MediaPackageのアップデートがあり、MediaPackageの1つのチャンネルを作成すると冗長構成された2つのInputが作成されるようになりました。このためMediaPackage側のチャンネルリソースとして作成は1つとなりました。しかし、MediaPackageのEndponit(Input)ならびに認証情報は相変わらず2種類をMediaLive側に設定する、ということが必要でした。
簡単になったAWS Elemental MediaLiveとAWS Elemental MediaPackageの連携方法を確認してみる
では、今回のアップデートで簡単になったAWS Elemental MediaLiveとAWS Elemental MediaPackageの連携方法を実際にAWSマネジメントコンソールの画面で確認してみましょう。まずは通常どおりAWS Elemental MediaPackageのチャンネルを作成します。MediaPackageが冗長入力に対応しているので(2018年8月のアップデート)作成が必要なチャンネルは1つだけです。またInput typeは従来どおりApple HLS
を選択しておきます。
続いてAWS Elemental MediaLiveの設定作業です。ここで各リソースの設定前に、IAMロールを設定、もしマネジメントコンソール上に下記のようなIAMロールをアップデートするメッセージが出た場合は、右側UpdateボタンでIAMロールのアップデートを行っておきましょう。
続いて、MediaLiveのリソース作成に移ります。MediaLiveのチャンネルを作成の際、Output groupsで[Add]ボタンを押下しOutputリソースを作成しようとすると、下記のように選択できるoutput group typeでMediaPackage
が追加されていることがわかります。このMediaPackage
を選択して次に進みます。
次の画面では、MediaPackage destinationとしてMediaPackageのチャンネルIDを入力します。これだけでMediaPacakgeの出力先チャンネルの設定としては完了です! MediaPackage outputsの項目で出力映像の解像度やコーデック、アスペクト比とフレームレートなどを適切に設定して、MediaLiveのチャンネルを作成しましょう。
その後、いつもの通りMediaLiveのチャンネルをStartさせて、配信エンコーダから映像を流せばMediaLiveからMediaPackageへと連携され、映像の視聴ができました!
まとめ
AWS Elemental MediaLiveでチャンネル出力先にAWS Elemental MediaPackageのチャンネルを選択できるようになったアップデートについて確認してみました。これまでの、MediaPackageのチャンネルのInput URLならびにその認証情報をMediaLiveのHLS outputの出力先に指定する方法でも、設定方法が変わってしまえば問題はないのですが、やはり多少の煩わしさはあったかと思います。今回のアップデートで、MediaPackageのチャンネルIDの入力のみ済むため、設定が本当に簡単になったかと思います。また特に、裏側でEC2 Systems Managerと連携することもこの方法ではないようですので、シンプルになった印象が強いです。引き続き、AWS Elemental MediaLive含めたAWS Media Servicesの機能アップデートに注目していきたいと思います。
補足: IAMロールのアップデート内容情報
私の環境では以下のように、インラインポリシー「MediaLiveCustomPolicy」がアップデートされました。以前も下記のエントリでアップデートをしているのですが、さらに各AWSサービスとの連携が図られているようですね。
$ aws iam list-role-policies --role-name MediaLiveAccessRole { "PolicyNames": [ "MediaLiveCustomPolicy" ] } $ aws iam get-role-policy --role-name MediaLiveAccessRole --policy-name MediaLiveCustomPolicy { "RoleName": "MediaLiveAccessRole", "PolicyName": "MediaLiveCustomPolicy", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "mediastore:ListContainers", "mediastore:PutObject", "mediastore:GetObject", "mediastore:DeleteObject", "mediastore:DescribeObject" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "logs:DescribeLogGroups" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "mediaconnect:ManagedDescribeFlow", "mediaconnect:ManagedAddOutput", "mediaconnect:ManagedRemoveOutput" ], "Resource": "*" } ] } }
$ aws iam list-role-policies --role-name MediaLiveAccessRole { "PolicyNames": [ "MediaLiveCustomPolicy" ] } $ aws iam get-role-policy --role-name MediaLiveAccessRole --policy-name MediaLiveCustomPolicy { "RoleName": "MediaLiveAccessRole", "PolicyName": "MediaLiveCustomPolicy", "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "mediastore:ListContainers", "mediastore:PutObject", "mediastore:GetObject", "mediastore:DeleteObject", "mediastore:DescribeObject" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "logs:DescribeLogGroups" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "mediaconnect:ManagedDescribeFlow", "mediaconnect:ManagedAddOutput", "mediaconnect:ManagedRemoveOutput" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:describeSubnets", "ec2:describeNetworkInterfaces", "ec2:createNetworkInterface", "ec2:createNetworkInterfacePermission", "ec2:deleteNetworkInterface", "ec2:deleteNetworkInterfacePermission", "ec2:describeSecurityGroups" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "mediapackage:DescribeChannel" ], "Resource": "*" } ] } }